/**
    算法描述：
    核心问题：
    解决所需数据结构+算法：
**/
#include<iostream>
#include<stack>
using namespace std;

int lowbit(int x) {return x & -x;}
string str[20010];

string dfs(int n) {
    stack<int> st;
    string ans = "";
    if("" == str[n]) {
        bool first = true;
        for(int i=0; n; i++) {
            if(1 == lowbit(n))
            st.push(i);
            n = n >> 1;
        }
        while(!st.empty()) {
            if(!first)  ans += "+";
            else first = !first;
            int x = st.top();
            st.pop();
            if(1 == x) ans += "2";
            if(0 == x) ans += "2(0)";
            if(1 < x) {
                ans += "2(";
                ans += dfs(x);
                ans += ")";
            }
        }
        return str[n] = ans;
    } else return str[n];
}

int main() {
    int n;
    cin >> n;
    cout << dfs(n) << endl;
    return 0;
}
